package com.yfp.file.service;

import com.yfp.common.core.domain.R;
import com.yfp.file.domain.FileProperty;
import com.yfp.file.domain.MultipartUploadDto;
import com.yfp.system.api.domain.SysFile;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件上传接口
 *
 *
 */
public interface ISysFileService {
    /**
     * 文件上传接口
     *
     * @param file 上传的文件
     * @return 访问地址
     */
    public String uploadFile(MultipartFile file) throws Exception;


    /**
     * 按类型上载文件
     *
     * @param file 文件
     * @param type 类型
     * @return {@link R}<{@link SysFile}>
     */
    SysFile uploadFileByType(MultipartFile file, String type) throws Exception;


    /**
     * 分片上传
     *
     * @param file 文件
     * @return {@link SysFile}
     * @throws Exception 例外
     */
    public SysFile splittingAndUploadingFiles(MultipartFile file) throws Exception;

    /**
     * 获取上传全局唯一ID
     *
     * @return {@link String}
     */
    String getUploadId(String fileName);


    /**
     * 分片上传
     *
     * @param param 参数
     * @return {@link R}
     */
    public R partUpload(MultipartUploadDto param);

    SysFile completeMultipartUpload(String uploadId);

    /**
     * 验证文件
     *
     * @param file         文件
     * @param fileProperty 文件属性
     */
    void validateFile(MultipartFile file, FileProperty fileProperty);

    /**
     * 是否为3：2比例
     *
     * @param file 文件
     * @return boolean
     */
    Boolean isAspectRatio3to2(MultipartFile file);

    Boolean isAspectRatio5To4(MultipartFile file);

    /**
     * 验证范围
     * @param file
     * @param fileProperty
     * @return
     */
    Boolean isValidateRange(MultipartFile file, FileProperty fileProperty);
    /**
     * 验证像素
     *
     * @param file         文件
     * @param fileProperty 文件属性
     * @return boolean
     */
    Boolean validatePixel(MultipartFile file, FileProperty fileProperty);
}
